1 using UnityEngine;
2 using
System.Collections;
3 using
System.Collections.Generic;
4 using
UnityEngine.UI;
5
6 public
class PuzzleGameManager : MonoBehaviour
7 {
8     
[SerializeField]
9     
private PuzzleGameSaver puzzleGameSaver;
10
11     
[SerializeField]
12     
private GameFinished gameFinished;
13
14     
private List<Button> puzzleButtons = new List<Button>();
15
16     
private List<Animator> puzzleButtonsAnimators = new List<Animator>();
17     
[SerializeField]
18     
private List<Sprite> gamePuzzleSprites = new List<Sprite>();
19
20     
private int level;
21     
private string selectedPuzzle;
22
23     
private Sprite puzzleBackgroundImage;
24
25     
private bool firstGuess, secondGuess;
26     
private int firstGuessIndex, secondGuessIndex;
27     
private string firstGuessPuzzle, secondGuessPuzzle;
28
29     
private int countTryGuess;
30
31     
private int countCorrectGuess;
32     
private int gameGuess;
33
34     
public void PickAPuzzle()
35     {
36         
37         
if(!firstGuess)
38         {
39             firstGuess =
true;
40
41             firstGuessIndex =
int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
42
43             firstGuessPuzzle = gamePuzzleSprites[firstGuessIndex].name;
44
45             StartCoroutine(
46                 TurnPuzzleButtonUp(puzzleButtonsAnimators[firstGuessIndex],
47                 puzzleButtons[firstGuessIndex],
48                 gamePuzzleSprites[firstGuessIndex]));
49
50         }
else if (!secondGuess)
51         {
52             secondGuess =
true;
53
54             secondGuessIndex =
int.Parse(UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name);
55
56             secondGuessPuzzle = gamePuzzleSprites[secondGuessIndex].name;
57
58
59             StartCoroutine(
60                 TurnPuzzleButtonUp(puzzleButtonsAnimators[secondGuessIndex],
61                 puzzleButtons[secondGuessIndex],
62                 gamePuzzleSprites[secondGuessIndex]));
63
64
65             StartCoroutine(CheckIfThePuzzlesMatch(puzzleBackgroundImage));
66
67             countTryGuess++;
68
69             Debug.Log(
"First Guess is " + firstGuessPuzzle + "and Second guess is " + secondGuessPuzzle);
70
71
72         }
73
74
75
76     }
77
78     IEnumerator CheckIfThePuzzlesMatch(Sprite puzzleBackgroundImage)
79     {
80         
yield return new WaitForSeconds(1.7f);
81
82             
if (firstGuessPuzzle == secondGuessPuzzle)
83             {
84             puzzleButtonsAnimators[firstGuessIndex].Play(
"FadeOut");
85             puzzleButtonsAnimators[secondGuessIndex].Play(
"FadeOut");
86
87             CheckIfTheGameIsFinished();
88             
// increment score
89             }
else
90             {
91             StartCoroutine(
92                TurnPuzzleButtonBack(puzzleButtonsAnimators[firstGuessIndex],
93                puzzleButtons[firstGuessIndex],
94                puzzleBackgroundImage));
95
96             StartCoroutine(
97                TurnPuzzleButtonBack(puzzleButtonsAnimators[secondGuessIndex],
98                puzzleButtons[secondGuessIndex],
99                puzzleBackgroundImage));
100             }
101
102         
yield return new WaitForSeconds(0.7f);
103
104         firstGuess = secondGuess =
false;
105     }
106
107     
void CheckIfTheGameIsFinished()
108     {
109         countCorrectGuess++;
110
111         
if (countCorrectGuess == gameGuess)
112         {
113             Debug.Log(
"Game Ends No More Puzzles");
114             CheckHowManyGuesses();
115         }
116
117     }
118
119     
void CheckHowManyGuesses ()
120     {
121         
int howManyGuesses = 0;
122
123         
switch (level)
124         {
125             
case 0:
126                 howManyGuesses =
5;
127                 
break;
128
129             
case 1:
130                 howManyGuesses =
10;
131                 
break;
132
133             
case 2:
134                 howManyGuesses =
15;
135                 
break;
136
137             
case 3:
138                 howManyGuesses =
20;
139                 
break;
140
141             
case 4:
142                 howManyGuesses =
25;
143                 
break;
144         }
145
146         
if (countTryGuess < howManyGuesses)
147         {
148             gameFinished.ShowGameFinishedPanel(
3);
149
150             puzzleGameSaver.Save(level, selectedPuzzle,
3);
151
152         }
else if (countTryGuess > howManyGuesses && countTryGuess < (howManyGuesses + 5))
153         {
154             gameFinished.ShowGameFinishedPanel(
2);
155
156             puzzleGameSaver.Save(level, selectedPuzzle,
2);
157
158         }
else
159         {
160             gameFinished.ShowGameFinishedPanel(
1);
161
162             puzzleGameSaver.Save(level, selectedPuzzle,
1);
163         }
164     }
165
166     
public List<Animator> ResetGameplay()
167     {
168         firstGuess = secondGuess =
false;
169
170         countTryGuess =
0;
171         countCorrectGuess =
0;
172
173         gameFinished.HideGameFinishedPanel();
174         
175         
return puzzleButtonsAnimators;
176     }
177
178
179     IEnumerator TurnPuzzleButtonUp(Animator anim, Button btn, Sprite puzzleImage)
180     {
181         anim.Play(
"TurnUp");
182         
yield return new WaitForSeconds(.4f);
183         btn.image.sprite = puzzleImage;
184     }
185
186     IEnumerator TurnPuzzleButtonBack(Animator anim, Button btn, Sprite puzzleImage)
187     {
188         anim.Play(
"TurnDown");
189         
yield return new WaitForSeconds(.4f);
190         btn.image.sprite = puzzleImage;
191     }
192
193     
void AddListeners()
194     {
195         
foreach (Button btn in puzzleButtons)
196         {
197             btn.onClick.RemoveAllListeners();
198             btn.onClick.AddListener(() => PickAPuzzle());
199         }
200     }
201
202     
public void SetUpButtonsAndAnimators(List<Button> buttons, List<Animator> animators)
203     {
204         
this.puzzleButtons = buttons;
205         
this.puzzleButtonsAnimators = animators;
206
207         gameGuess = puzzleButtons.Count /
2;
208
209         puzzleBackgroundImage = puzzleButtons[
0].image.sprite;
210
211         AddListeners();
212
213     }
214
215     
public void SetGamePuzzleSprites(List<Sprite> gamePuzzleSprites)
216     {
217         
this.gamePuzzleSprites = gamePuzzleSprites;
218     }
219
220     
public void SetLevel(int level)
221     {
222         
this.level = level;
223     }
224
225     
public void SetSelectedPuzzle(string selectedPuzzle)
226     {
227         
this.selectedPuzzle = selectedPuzzle;
228     }
229
230 }
// PuzzleGameManager



Full source code giải đố hình đơn giản 16.632 lượt xem

Gõ tìm kiếm nhanh...